package com.common.log.config;

import cn.hutool.core.util.StrUtil;
import feign.RequestInterceptor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * feign拦截器，只是传递traceId，set

 */
@Configuration
@ConditionalOnClass(value = {RequestInterceptor.class})
public class FeignTraceConfig {
    @Bean
    public RequestInterceptor feignTraceInterceptor() {
        return template -> {
            //todo 注意：：：这里只是判断非空，传递给下一个微服务，第一次写入traceId是在
            /** Comment:请求过滤器，实现OncePerRequestFilter(只会执行一次，由于不同的容器，可能会有的执行多次，所以)
             * {@link CustomOncePerRequestFilter#doFilterInternal}
             */
            //传递日志traceId
            String traceId = MDCTraceUtils.getTraceId();
            if (StrUtil.isNotEmpty(traceId)) {
                template.header(MDCTraceUtils.TRACE_ID_HEADER, traceId);
                template.header(MDCTraceUtils.SPAN_ID_HEADER, MDCTraceUtils.getNextSpanId());
            }
        };
    }
}
